diff --git a/.env.example b/.env.example index 82e4b9d..bceb107 100644 --- a/.env.example +++ b/.env.example @@ -31,9 +31,13 @@ FT_CONFIGURATOR= FINAL_OWNER= # Gnosis Safe Address and API key (Optional - Override default safe address for deployments, used with --safe when wiring) PRIVATE_KEY_PROPOSER= +SAFE_API_KEY= + +# Here we need to pick one or the other, right? +# If I use a delegate I don't need an owner, and if I use an owner I don't need a delegate. SAFE_DELEGATE_ADDRESS= SAFE_OWNER_ADDRESS= -SAFE_API_KEY= + # For verification of contracts on Etherscan, BscScan, SonicScan etc ETHERSCAN_API_KEY= \ No newline at end of file diff --git a/DEPLOYMENT_CHECKLIST.md b/DEPLOYMENT_CHECKLIST.md index 3025e64..9740030 100644 --- a/DEPLOYMENT_CHECKLIST.md +++ b/DEPLOYMENT_CHECKLIST.md @@ -11,6 +11,7 @@ Quick reference checklist for deploying FT token to production. - [ ] Set `ETHERSCAN_API_KEY=` - [ ] Set `FT_CONFIGURATOR=` role to have control of initial mint if network is sonic - [ ] Set `FINAL_OWNER=` +- [ ] Run `pnpm install` - [ ] Run `pnpm compile` - [ ] Run `pnpm test` diff --git a/deploy/FT.ts b/deploy/FT.ts index dc0adb9..8455985 100644 --- a/deploy/FT.ts +++ b/deploy/FT.ts @@ -51,6 +51,7 @@ const deploy: DeployFunction = async (hre) => { console.log(`Chain Config: ${chainConfig.name}`); console.log(`Configurator: ${ftConfigurator} owner of the initial mint if network is sonic`); console.log(`Endpoint V2: ${endpointV2Address}`); + // This confused me with safe delegate for the wiring. I guess there is a separate log in the wiring process. console.log(`Delegate: ${delegate}`); console.log(`Final Owner: ${finalOwner}`); diff --git a/deployments/sonic/FT.json b/deployments/sonic/FT.json index 555d440..e37e78a 100644 --- a/deployments/sonic/FT.json +++ b/deployments/sonic/FT.json @@ -1,5 +1,5 @@ { - "address": "0x5DD1A7A369e8273371d2DBf9d83356057088082c", + "address": "0x26382a5331DDB46e7c0c101fb53480EB64a94AD9", "abi": [ { "inputs": [ @@ -2088,16 +2088,16 @@ "type": "function" } ], - "transactionHash": "0x9d5f507b73d9440cb1a9c052e3c4034ed04be3f4b599b42d9e9da91799414c35", + "transactionHash": "0x4c9dbd16bf520937bbefd3b52a3d1e2bb6f845d91f80de68f18a6937024801ff", "args": [ "Flying Tulip", "FT", "0x6F475642a6e85809B1c36Fa62763669b1b48DD5B", - "0x22246a9183ce2ce6e2c2a9973f94aea91435017c", - "0x22246a9183ce2ce6e2c2a9973f94aea91435017c", + "0xddd8FBe1ddD4D6d99CB9851AFD4D47aC6EeD9fb8", + "0xddd8FBe1ddD4D6d99CB9851AFD4D47aC6EeD9fb8", 146 ], - "numDeployments": 7, + "numDeployments": 8, "bytecode": "0x6101a08060405234610960575f615ce5803803809161001e8286610977565b843982019160c0818403126109605780516001600160401b03811161096057836100499183016109ae565b602082015190936001600160401b038211610960576100699183016109ae565b61007560408301610a03565b9061008260608401610a03565b9460a061009160808601610a03565b940151926040968751916100a58984610977565b60018352603160f81b60208401908152916001600160a01b03168015610964575f80546001600160a01b03198116831782558b51939183916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a01b03166080819052803b15610960576024835f8193819563ca5eb5e160e01b845260048401525af1801561095657610941575b5064e8d4a5100060a05282516001600160401b03811161085357600854600181811c91168015610937575b602082101461083557601f81116108d4575b50806020601f8211600114610872578991610867575b508160011b915f199060031b1c1916176008555b83516001600160401b03811161085357600954600181811c91168015610849575b602082101461083557601f81116107d2575b50806020601f8211600114610770578991610765575b508160011b915f199060031b1c1916176009555b61021183610a41565b6101605261021e82610bbd565b610180528251602084012091826101205251902080610140524660e05287519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84528983015260608201524660808201523060a082015260a0815261028a60c082610977565b51902060c052306101005280516001600160401b03811161075157600f54600181811c91168015610747575b602082101461073357601f81116106d0575b506020601f821160011461065d579181610311925f516020615c855f395f51905f52948991610652575b508160011b915f199060031b1c191617600f555b875191829182610a17565b0390a180516001600160401b03811161063e57600e54600181811c91168015610634575b602082101461062057601f81116105bd575b506020601f821160011461054a579181610390925f516020615cc55f395f51905f5294889161053f575b508160011b915f199060031b1c191617600e555b865191829182610a17565b0390a16001600160a01b038216801561053057601080546001600160a01b0319168217905584519081527f94925e0aa69c2ddac3a4e416156701b82fdfbcd2a0421400777c0273518327cf90602090a1609281148015610524575b8015610519575b156105075746146104f8575b50600d549060ff82166104e9575060019060ff191617600d557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25860208251338152a151614e239081610e628239608051818181610893015281816109e2015281816112940152818161179e01528181612cdd015281816143f7015281816144c9015281816145d00152818161499a0152614c8a015260a0518181816111b601528181611de4015281816136df0152818161426d0152614669015260c05181505060e0518150506101005181505061012051815050610140518150506101605181505061018051815050f35b63d93c066560e01b8152600490fd5b61050190610cf5565b5f6103fe565b636733ffe160e01b8352600452602482fd5b50617a6981146103f2565b5062aa36a781146103eb565b63d92e233d60e01b8452600484fd5b90508201515f610371565b600e865280862090601f198316875b8181106105a55750925f516020615cc55f395f51905f52949260019282610390961061058d575b5050811b01600e55610385565b8401515f1960f88460031b161c191690555f80610580565b91926020600181928689015181550194019201610559565b600e86527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd601f830160051c81019160208410610616575b601f0160051c01905b81811061060b5750610347565b8681556001016105fe565b90915081906105f5565b634e487b7160e01b86526022600452602486fd5b90607f1690610335565b634e487b7160e01b85526041600452602485fd5b90508201515f6102f2565b600f875280872090601f198316885b8181106106b85750925f516020615c855f395f51905f5294926001928261031196106106a0575b5050811b01600f55610306565b8401515f1960f88460031b161c191690555f80610693565b9192602060018192868901518155019401920161066c565b600f87527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802601f830160051c81019160208410610729575b601f0160051c01905b81811061071e57506102c8565b878155600101610711565b9091508190610708565b634e487b7160e01b87526022600452602487fd5b90607f16906102b6565b634e487b7160e01b86526041600452602486fd5b90508501515f6101f4565b60098a52808a209150601f1983168a5b8181106107ba575090836001949392106107a2575b5050811b01600955610208565b8701515f1960f88460031b161c191690555f80610795565b9192602060018192868c015181550194019201610780565b600989527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af601f830160051c8101916020841061082b575b601f0160051c01905b81811061082057506101de565b898155600101610813565b909150819061080a565b634e487b7160e01b89526022600452602489fd5b90607f16906101cc565b634e487b7160e01b88526041600452602488fd5b90508401515f610197565b60088a52808a209150601f1983168a5b8181106108bc575090836001949392106108a4575b5050811b016008556101ab565b8601515f1960f88460031b161c191690555f80610897565b9192602060018192868b015181550194019201610882565b600889527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3601f830160051c8101916020841061092d575b601f0160051c01905b8181106109225750610181565b898155600101610915565b909150819061090c565b90607f169061016f565b61094e9197505f90610977565b5f955f610144565b89513d5f823e3d90fd5b5f80fd5b631e4fbdf760e01b5f525f60045260245ffd5b601f909101601f19168101906001600160401b0382119082101761099a57604052565b634e487b7160e01b5f52604160045260245ffd5b81601f82011215610960578051906001600160401b03821161099a57604051926109e2601f8401601f191660200185610977565b8284526020838301011161096057815f9260208093018386015e8301015290565b51906001600160a01b038216820361096057565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b908151602081105f14610a9c575090601f815111610a7b576020815191015160208210610a6c571790565b5f198260200360031b1b161790565b60405163305a27a960e01b8152908190610a989060048301610a17565b0390fd5b6001600160401b03811161099a57600a54600181811c91168015610bb3575b6020821014610b9f57601f8111610b6c575b50602092601f8211600114610b0b57928192935f92610b00575b50508160011b915f199060031b1c191617600a5560ff90565b015190505f80610ae7565b601f19821693600a5f52805f20915f5b868110610b545750836001959610610b3c575b505050811b01600a5560ff90565b01515f1960f88460031b161c191690555f8080610b2e565b91926020600181928685015181550194019201610b1b565b600a5f52601f60205f20910160051c810190601f830160051c015b818110610b945750610acd565b5f8155600101610b87565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610abb565b908151602081105f14610be8575090601f815111610a7b576020815191015160208210610a6c571790565b6001600160401b03811161099a57600b54600181811c91168015610ceb575b6020821014610b9f57601f8111610cb8575b50602092601f8211600114610c5757928192935f92610c4c575b50508160011b915f199060031b1c191617600b5560ff90565b015190505f80610c33565b601f19821693600b5f52805f20915f5b868110610ca05750836001959610610c88575b505050811b01600b5560ff90565b01515f1960f88460031b161c191690555f8080610c7a565b91926020600181928685015181550194019201610c67565b600b5f52601f60205f20910160051c810190601f830160051c015b818110610ce05750610c19565b5f8155600101610cd3565b90607f1690610c07565b60ff600d541615610d43576010546001600160a01b031680158015610d7e575b610d66576080516001600160a01b03163314908115610d5c575b50610d435763d93c066560e01b5f5260045ffd5b6b204fce5e3e25026110000000610d5a915f610d90565b565b905033145f610d2f565b506b204fce5e3e25026110000000610d5a915f610d90565b506001600160a01b0382168114610d15565b6001600160a01b03169081610e0d57600754838101809111610df9575f516020615ca55f395f51905f52916020916007555b6001600160a01b03169384610de35780600754036007555b604051908152a3565b845f526005825260405f20818154019055610dda565b634e487b7160e01b5f52601160045260245ffd5b815f52600560205260405f2054838110610e46575f516020615ca55f395f51905f529184602092855f52600584520360405f2055610dc2565b91905063391434e360e21b5f5260045260245260445260645ffdfe60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461037f578063095ea7b31461037a5780630d35b41514610375578063111ecdad1461037057806313137d651461036b578063134d4f2514610366578063156a0d0f1461036157806316c38b3c1461035c57806317442b701461035757806318160ddd146103525780631f5e13341461034d57806323b872dd146103485780632b507df8146103435780632d1df6fa1461033e578063313ce567146103395780633400288b146103345780633644e5151461032f5780633b6f743b1461032a57806342966c681461032557806352ae28791461027b5780635535d461146103205780635a0dfe4d1461031b5780635c975abb146103165780635e280f11146103115780636fc1b31e1461030c57806370a0823114610307578063715018a61461030257806379cc6790146102fd5780637d25a05e146102f85780637ecebe00146102f357806382413eac146102ee57806384b0196e146102e9578063857749b0146102e45780638da5cb5b146102df57806395d89b41146102da578063963efcaa146102d55780639f68b964146102d05780639fd5a6cf146102cb578063a9059cbb146102c6578063b731ea0a146102c1578063b84c8246146102bc578063b98bd070146102b7578063bb0b6a53146102b2578063bc70b354146102ad578063bd815db0146102a8578063c47f0027146102a3578063c7c7f5b31461029e578063ca5eb5e114610299578063d045a0dc14610294578063d42438851461028f578063d505accf1461028a578063dd62ed3e14610285578063f2fde38b14610280578063fc0c546a1461027b5763ff7bd03d14610276575f80fd5b6131a9565b611381565b6130b9565b613020565b612e65565b612db6565b612d6c565b612c82565b612b11565b612924565b612785565b612712565b6126bb565b6125d6565b6123bd565b612284565b61223c565b611e3f565b611e07565b611daf565b611c9d565b611c4d565b611c14565b611af9565b611a6f565b611a08565b6119c4565b611972565b6118d8565b611871565b6117c2565b611754565b611714565b6116b0565b611632565b611344565b611133565b6110f3565b611050565b611009565b610eec565b610e9b565b610e3d565b610e04565b610dc9565b610d8a565b610bca565b610b62565b610b29565b61086d565b610732565b610586565b610467565b6103e9565b5f91031261038e57565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9060206103e6928181520190610392565b90565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576104456040516104318161042a8161142a565b03826115f1565b604051918291602083526020830190610392565b0390f35b73ffffffffffffffffffffffffffffffffffffffff81160361038e57565b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576104af6004356104a581610449565b6024359033614127565b602060405160018152f35b908160e091031261038e5790565b939291906104e48560a081019260208091805184520151910152565b60a06040860152815180915260c0850190602060c08260051b8801019301915f905b82821061052c575050505090606061052a9294019060208091805184520151910152565b565b90919293602080610578837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408c600196030186526040838a518051845201519181858201520190610392565b960192019201909291610506565b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760043567ffffffffffffffff811161038e576105d59036906004016104ba565b6105dd61320c565b506105e661320c565b506040517ffc0c546a000000000000000000000000000000000000000000000000000000008152602081600481305afa9081156107005773ffffffffffffffffffffffffffffffffffffffff916020915f91610705575b506004604051809481937f18160ddd000000000000000000000000000000000000000000000000000000008352165afa908115610700575f916106d1575b506106846122d5565b905f825260208201526104456106b561069b61326b565b9360408101356106af6060830135926132b1565b506136d6565b6106bd6122d5565b9182526020820152604051938493846104c8565b6106f3915060203d6020116106f9575b6106eb81836115f1565b810190613244565b5f61067b565b503d6106e1565b613239565b6107259150823d841161072b575b61071d81836115f1565b810190613224565b5f61063d565b503d610713565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc606091011261038e57600490565b9181601f8401121561038e5782359167ffffffffffffffff831161038e576020838186019501011161038e57565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820160e0811261038e5760601361038e576004916064359160843567ffffffffffffffff811161038e5782610839916004016107b2565b9290929160a43561084981610449565b9160c4359067ffffffffffffffff821161038e57610869916004016107b2565b9091565b610876366107e0565b50505090923373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001603610afd5780356108c381611042565b6108cc81613741565b906020830135809203610abf5750506109016108e88386614240565b73ffffffffffffffffffffffffffffffffffffffff1690565b91610927610917610912838861424c565b61425e565b610920846132b1565b5084614293565b9485906028831161099f575b50847fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c73ffffffffffffffffffffffffffffffffffffffff8661099a610978886132b1565b956040519384931696836020909392919363ffffffff60408201951681520152565b0390a3005b906109ca92916109c46109b46040870161378a565b936109be876132b1565b926142df565b92614319565b9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b1561038e57610a485f949185926040519687809481937f7cb590120000000000000000000000000000000000000000000000000000000083528b8960048501613794565b03925af19283156107005761097873ffffffffffffffffffffffffffffffffffffffff9361099a927fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c96610aa5575b509350829450869150610933565b80610ab35f610ab9936115f1565b80610384565b5f610a97565b80610ace63ffffffff92611042565b7fc26bebcc000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b7f91ac5e4f000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602060405160028152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57604080517f02e49c2c00000000000000000000000000000000000000000000000000000000815260016020820152f35b8015150361038e57565b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57600435610c0581610bc0565b3373ffffffffffffffffffffffffffffffffffffffff5f5416141580610d68575b610d3c5715610cb757600d5460ff8116610c8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006001911617600d557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b600d5460ff811615610d14577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600d557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fe001a34b000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b503373ffffffffffffffffffffffffffffffffffffffff601054161415610c26565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57604080516001815260026020820152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576020600754604051908152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602060405160018152f35b3461038e5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576104af600435610e7b81610449565b602435610e8781610449565b60443591610e968333836137cc565b613950565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602073ffffffffffffffffffffffffffffffffffffffff60105416604051908152f35b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57600435610f2781610449565b3373ffffffffffffffffffffffffffffffffffffffff5f5416141580610fe7575b610d3c5773ffffffffffffffffffffffffffffffffffffffff168015610fbf576020817f94925e0aa69c2ddac3a4e416156701b82fdfbcd2a0421400777c0273518327cf927fffffffffffffffffffffffff00000000000000000000000000000000000000006010541617601055604051908152a1005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b503373ffffffffffffffffffffffffffffffffffffffff601054161415610f48565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602060405160128152f35b63ffffffff81160361038e57565b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e577f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b6004356110ac81611042565b602435906110b86139eb565b63ffffffff81165f5260016020528160405f20556110ee604051928392836020909392919363ffffffff60408201951681520152565b0390a1005b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602061112b613a37565b604051908152f35b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760043567ffffffffffffffff811161038e576111829036906004016104ba565b60243561118e81610bc0565b61119661320c565b508135916060810135906111e160408201356111b186611042565b6111dc7f000000000000000000000000000000000000000000000000000000000000000080926141f1565b614228565b918083106113155761127b604086611247876111fd8888613aee565b9061120785611042565b61120f61320c565b5061121985613741565b6112306112246122e4565b63ffffffff9097168752565b602086015285850152606084015215156080830152565b8151809381927fddc28c58000000000000000000000000000000000000000000000000000000008352309060048401613c46565b038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561070057610445915f916112e6575b5060405191829182815181526020918201519181019190915260400190565b611308915060403d60401161130e575b61130081836115f1565b810190613c32565b826112c7565b503d6112f6565b827f71c4efed000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5761137f60043533613cde565b005b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576020604051308152f35b6024359061ffff8216820361038e57565b359061ffff8216820361038e57565b90600182811c92168015611420575b60208310146113f357565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916113e8565b600f545f9291611439826113d9565b80825291600181169081156114ad5750600114611454575050565b600f5f9081529293509091907f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8025b838310611493575060209250010190565b600181602092949394548385870101520191019190611482565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b5f92918154916114f6836113d9565b808352926001811690811561154b575060011461151257505050565b5f9081526020812093945091925b838310611531575060209250010190565b600181602092949394548385870101520191019190611520565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6060810190811067ffffffffffffffff8211176115d057604052565b611587565b6040810190811067ffffffffffffffff8211176115d057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176115d057604052565b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5761044561042a6104316116a460043561167981611042565b63ffffffff6116866113b9565b91165f52600360205260405f209061ffff165f5260205260405f2090565b604051928380926114e7565b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602061170a6004356116f081611042565b6024359063ffffffff165f52600160205260405f20541490565b6040519015158152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602060ff600d54166040519015158152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e577ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197602073ffffffffffffffffffffffffffffffffffffffff60043561183581610449565b61183d6139eb565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455604051908152a1005b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5773ffffffffffffffffffffffffffffffffffffffff6004356118c181610449565b165f526005602052602060405f2054604051908152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5761190e6139eb565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5761137f6004356119b081610449565b602435906119bf8233836137cc565b613cde565b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576119fe600435611042565b60206040515f8152f35b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5773ffffffffffffffffffffffffffffffffffffffff600435611a5881610449565b165f52600c602052602060405f2054604051908152f35b3461038e5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57611aa736610783565b5060643567ffffffffffffffff811161038e57611ac89036906004016107b2565b50506020608435611ad881610449565b6040519073ffffffffffffffffffffffffffffffffffffffff309116148152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57611bbb604051611b3a8161042a8161142a565b6040516020611b4981836115f1565b5f8252808201917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820136843781611bc9611b826132bb565b6040519788977f0f00000000000000000000000000000000000000000000000000000000000000895260e0858a015260e0890190610392565b908782036040890152610392565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b828110611bfd57505050500390f35b835185528695509381019392810192600101611bee565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602060405160068152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576040515f600e54611cdb816113d9565b8084529060018116908115611d6d5750600114611d0f575b61044583611d03818503826115f1565b604051918291826103d5565b600e5f9081527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd939250905b808210611d5357509091508101602001611d03611cf3565b919260018160209254838588010152019101909291611d3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b84019091019150611d039050611cf3565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760206040515f8152f35b3461038e5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57600435611e7a81610449565b602435611e8681610449565b604435906064359260843567ffffffffffffffff811161038e57611eae9036906004016107b2565b9085421161220f57611ede8373ffffffffffffffffffffffffffffffffffffffff165f52600c60205260405f2090565b5495604051611f8281611f5660208201948b8b8b8b89919273ffffffffffffffffffffffffffffffffffffffff60a09497969592978160c08601997f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98752166020860152166040840152606083015260808201520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826115f1565b519020611f56611fd6611f93613a37565b9260405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b519020833b15612179579060209161201b60405194859384937f1626ba7e0000000000000000000000000000000000000000000000000000000085526004850161336c565b038173ffffffffffffffffffffffffffffffffffffffff86165afa908115610700577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000915f9161214a575b501603612104575b6120c18173ffffffffffffffffffffffffffffffffffffffff165f52600c60205260405f2080549060018201905590565b938085036120d4575061137f9350614127565b7ff2c3b165000000000000000000000000000000000000000000000000000000005f52600485905260245260445ffd5b7f4b800e46000000000000000000000000000000000000000000000000000000005f90815260045273ffffffffffffffffffffffffffffffffffffffff1660245260445ffd5b61216c915060203d602011612172575b61216481836115f1565b8101906132f6565b5f612088565b503d61215a565b906121899061218f93369161232d565b90613d04565b73ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff8216036121c85750612090565b7f4b800e46000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff9081166004521660245260445ffd5b7f62791302000000000000000000000000000000000000000000000000000000005f52600486905260245ffd5b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576104af60043561227a81610449565b6024359033613950565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b6040519061052a6040836115f1565b6040519061052a60a0836115f1565b67ffffffffffffffff81116115d057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612339826122f3565b9161234760405193846115f1565b82948184528183011161038e578281602093845f960137010152565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261038e576004359067ffffffffffffffff821161038e578060238301121561038e578160246103e69360040135910161232d565b3461038e576123cb36612363565b6123d36139eb565b805167ffffffffffffffff81116115d0576123f8816123f3600e546113d9565b613d30565b6020601f82116001146124825791612468826110ee937f57c940aa14b51ea5f96b7a2bea757ce355d996e2c5d7a3c68aff1c75a326269b955f91612477575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b600e55604051918291826103d5565b90508301515f612437565b600e5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b81811061254c5750927f57c940aa14b51ea5f96b7a2bea757ce355d996e2c5d7a3c68aff1c75a326269b9492600192826110ee9610612515575b5050811b01600e55611d03565b8401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f80612508565b919260206001819286890151815501940192016124ce565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261038e5760043567ffffffffffffffff811161038e5760040182601f8201121561038e5780359267ffffffffffffffff841161038e576020808301928560051b01011161038e579190565b3461038e576125e436612564565b906125ed6139eb565b6125f682613253565b9061260460405192836115f1565b828252602082019260051b81019036821161038e5780935b82851061262c5761137f84613fc0565b843567ffffffffffffffff811161038e5782019060608236031261038e5760405191612657836115b4565b803561266281611042565b8352612670602082016113ca565b602084015260408101359067ffffffffffffffff821161038e57019036601f8301121561038e576020926126ab84933690858135910161232d565b604082015281520194019361261c565b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5763ffffffff6004356126fb81611042565b165f526001602052602060405f2054604051908152f35b3461038e5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760043561274d81611042565b6127556113b9565b6044359067ffffffffffffffff821161038e576104459261277d6104319336906004016107b2565b92909161342e565b61278e36612564565b5f5b81811061282f576040517f8e9e70990000000000000000000000000000000000000000000000000000000081525f81600481335afa801561070057612809915f9161280d575b506040519182917f8351eea7000000000000000000000000000000000000000000000000000000008352600483016103d5565b0390fd5b61282991503d805f833e61282181836115f1565b81019061364d565b826127d6565b61283a818385613516565b9061286a61286661284a846132b1565b60208501359063ffffffff165f52600160205260405f20541490565b1590565b61291b5760c08201359160a081013561288761010083018361355b565b94909161289660e085016135ac565b936128a561012082018261355b565b959095303b1561038e575f966128eb926040519a8b98899788977fd045a0dc000000000000000000000000000000000000000000000000000000008952600489016135c8565b0391305af191821561070057600192612907575b505b01612790565b80610ab35f612915936115f1565b5f6128ff565b60019150612901565b3461038e5761293236612363565b61293a6139eb565b805167ffffffffffffffff81116115d05761295f8161295a600f546113d9565b613d73565b6020601f82116001146129dd57916129ce826110ee937f4737457377f528cc8afd815f73ecb8b05df80d047dbffc41c17750a4033592bc955f9161247757507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b600f55604051918291826103d5565b600f5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802915f5b818110612aa75750927f4737457377f528cc8afd815f73ecb8b05df80d047dbffc41c17750a4033592bc9492600192826110ee9610612a70575b5050811b01600f55611d03565b8401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f80612a63565b91926020600181928689015181550194019201612a29565b91608061052a929493612b00604060c08301978051845267ffffffffffffffff60208201511660208501520151604083019060208091805184520151910152565b019060208091805184520151910152565b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760043567ffffffffffffffff811161038e57612b5b9036906004016104ba565b60407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261038e57606435612b9181610449565b612b996136b0565b50612ba261320c565b50612bab6136b0565b50612bb461320c565b50606082013590612bcd60408401356111b18535611042565b918083106113155750612c0790612be48333613cde565b612bee8385613aee565b612bf7866132b1565b91612c01366140d2565b926148ef565b90612c106122d5565b928184528160208501527f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a612c70612c498551936132b1565b936040519181839233978460409194939263ffffffff606083019616825260208201520152565b0390a361044560405192839283612abf565b3461038e575f60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57600435612cbe81610449565b612cc66139eb565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b1561038e5773ffffffffffffffffffffffffffffffffffffffff60245f928360405195869485937fca5eb5e10000000000000000000000000000000000000000000000000000000085521660048401525af1801561070057612d60575080f35b61137f91505f906115f1565b612d75366107e0565b5050509092303303612d8e576109016108e88386614240565b7f14d4a4e8000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e577fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c2427760602073ffffffffffffffffffffffffffffffffffffffff600435612e2981610449565b612e316139eb565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000006002541617600255604051908152a1005b3461038e5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57600435612ea081610449565b602435612eac81610449565b604435906064359260843560ff8116810361038e5760a43560c43591864211612ff35790612f8e9291612efd8573ffffffffffffffffffffffffffffffffffffffff165f52600c60205260405f2090565b5497604051612f7581611f5660208201948d8d8d8d89919273ffffffffffffffffffffffffffffffffffffffff60a09497969592978160c08601997f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98752166020860152166040840152606083015260808201520152565b519020611f56612f86611f93613a37565b519020614118565b73ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff8216036121c857506120c18173ffffffffffffffffffffffffffffffffffffffff165f52600c60205260405f2080549060018201905590565b7f62791302000000000000000000000000000000000000000000000000000000005f52600487905260245ffd5b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760206130b060043561306081610449565b73ffffffffffffffffffffffffffffffffffffffff6024359161308283610449565b165f526006835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5773ffffffffffffffffffffffffffffffffffffffff60043561310981610449565b6131116139eb565b16801561317d5773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b3461038e5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760206131e336610783565b63ffffffff81356131f381611042565b165f52600182528160405f205491013560405191148152f35b60405190613219826115d5565b5f6020838281520152565b9081602091031261038e57516103e681610449565b6040513d5f823e3d90fd5b9081602091031261038e575190565b67ffffffffffffffff81116115d05760051b60200190565b6040519061327a6020836115f1565b5f80835282815b82811061328d57505050565b60209060405161329c816115d5565b5f815260608382015282828501015201613281565b356103e681611042565b604051906132ca6040836115f1565b600182527f31000000000000000000000000000000000000000000000000000000000000006020830152565b9081602091031261038e57517fffffffff000000000000000000000000000000000000000000000000000000008116810361038e5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b6040906103e694928152816020820152019161332e565b909291928360021161038e57831161038e57600201917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0190565b805191908290602001825e015f815290565b6133ea939261052a928160405196879460208601906133be565b918237015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836115f1565b9160206103e693818152019161332e565b6116a461042a9263ffffffff61345f9397959697165f52600360205260405f209061ffff165f5260205260405f2090565b8051156134db5783156134d55760028410156134ac5750506128096040519283927f9a6d49cd0000000000000000000000000000000000000000000000000000000084526004840161341d565b9092806134cf916103e6946134ca6134c536848461232d565b614082565b613383565b916133d0565b92509050565b5091906103e691369161232d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91908110156135565760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec18136030182121561038e570190565b6134e9565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561038e570180359067ffffffffffffffff821161038e5760200191813603831361038e57565b356103e681610449565b67ffffffffffffffff81160361038e57565b926103e69795969473ffffffffffffffffffffffffffffffffffffffff9367ffffffffffffffff60406136399563ffffffff813561360581611042565b168952602081013560208a0152013561361d816135b6565b166040870152606086015260e0608086015260e085019161332e565b941660a082015260c081850391015261332e565b60208183031261038e5780519067ffffffffffffffff821161038e570181601f8201121561038e57805190613681826122f3565b9261368f60405194856115f1565b8284526020838301011161038e57815f9260208093018386015e8301015290565b604051906136bd826115b4565b815f81525f602082015260406136d161320c565b910152565b613705906111dc7f000000000000000000000000000000000000000000000000000000000000000080926141f1565b9182918084106137125750565b837f71c4efed000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b63ffffffff16805f52600160205260405f205490811561375f575090565b7ff6ff4fb7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b356103e6816135b6565b6103e6939273ffffffffffffffffffffffffffffffffffffffff60809316825260208201525f60408201528160608201520190610392565b73ffffffffffffffffffffffffffffffffffffffff909291921690815f52600660205261381a8360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110613849575b50505050565b8181106139085782156138dc5773ffffffffffffffffffffffffffffffffffffffff8416156138b0576138a6925f526006602052039160405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b555f808080613843565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff847ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b919073ffffffffffffffffffffffffffffffffffffffff8316156139bf5773ffffffffffffffffffffffffffffffffffffffff8116156139935761052a9261455e565b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f54163303613a0b57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b604051613a478161042a8161142a565b60208151910120613a566132bb565b602081519101206040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152613aae60c0826115f1565b51902090565b9081602091031261038e57516103e681610bc0565b9091613ae06103e693604084526040840190610392565b916020818403910152610392565b9091613b22613b4893613b05602085013591614663565b613b1c613b1560a087018761355b565b369161232d565b916146d5565b93909283945f14613c02576002905b61277d613b3d826132b1565b91608081019061355b565b9173ffffffffffffffffffffffffffffffffffffffff613b7d60045473ffffffffffffffffffffffffffffffffffffffff1690565b16908382613b8a57505050565b613bc6926020926040518095819482937f043a78eb00000000000000000000000000000000000000000000000000000000845260048401613ac9565b03915afa801561070057613bd75750565b613bf89060203d602011613bfb575b613bf081836115f1565b810190613ab4565b50565b503d613be6565b600190613b31565b919082604091031261038e57604051613c22816115d5565b6020808294805184520151910152565b9060408282031261038e576103e691613c0a565b9073ffffffffffffffffffffffffffffffffffffffff6020919493946040845263ffffffff81511660408501528281015160608501526080613ccd613c99604084015160a08489015260e0880190610392565b60608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08883030160a0890152610392565b910151151560c08501529416910152565b9073ffffffffffffffffffffffffffffffffffffffff8216156139bf5761052a9161438c565b6103e691613d1191614775565b909291926147e6565b818110613d25575050565b5f8155600101613d1a565b90601f8211613d3d575050565b61052a91600e5f5260205f20906020601f840160051c83019310613d69575b601f0160051c0190613d1a565b9091508190613d5c565b90601f8211613d80575050565b61052a91600f5f5260205f20906020601f840160051c83019310613d6957601f0160051c0190613d1a565b9190601f8111613dba57505050565b61052a925f5260205f20906020601f840160051c83019310613d6957601f0160051c0190613d1a565b80518210156135565760209160051b010190565b919091825167ffffffffffffffff81116115d057613e1f81613e1984546113d9565b84613dab565b6020601f8211600114613e7c578190613e6d9394955f92613e71575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b9055565b015190505f80613e3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821690613ead845f5260205f2090565b915f5b818110613f0657509583600195969710613ecf575b505050811b019055565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080613ec5565b9192602060018192868b015181550194019201613eb0565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310613f5057505050505090565b9091929394602080613fb1837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752606060408b5163ffffffff815116845261ffff8682015116868501520151918160408201520190610392565b97019301930191939290613f41565b5f5b815181101561404b5780613fe56040613fdd60019486613de3565b510151614082565b6140456040613ff48386613de3565b51015163ffffffff6140068487613de3565b5151165f52600360205261404060405f206140306020614026878a613de3565b51015161ffff1690565b61ffff165f5260205260405f2090565b613df7565b01613fc2565b5061407d7fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b6749160405191829182613f1e565b0390a1565b600361ffff600283015116036140955750565b612809906040519182917f9a6d49cd0000000000000000000000000000000000000000000000000000000083526020600484018181520190610392565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261038e5760405190614109826115d5565b60243582526044356020830152565b916103e69391613d1193614a05565b73ffffffffffffffffffffffffffffffffffffffff169081156138dc5773ffffffffffffffffffffffffffffffffffffffff81169283156138b057806141b77f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593855f52600660205260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b55604051908152602090a3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81156141fb570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8181029291811591840414171561423b57565b6141c4565b9060201161038e573590565b9060281161038e576020013560c01c90565b6103e69067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000009116614228565b73ffffffffffffffffffffffffffffffffffffffff8116156142d6575b73ffffffffffffffffffffffffffffffffffffffff81161561399357816103e691614475565b5061dead6142b0565b908060281161038e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd860286103e693019101369161232d565b907fffffffffffffffff000000000000000000000000000000000000000000000000936103e6937fffffffff00000000000000000000000000000000000000000000000000000000611f569360405197889660c01b16602087015260e01b166028850152602c840152604c8301906133be565b600d5490919060ff161561444e576143bc6108e860105473ffffffffffffffffffffffffffffffffffffffff1690565b8073ffffffffffffffffffffffffffffffffffffffff841614801561446d575b6144625773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163314908115614458575b5061444e577fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f61052a92614aa1565b905033145f614421565b505f61052a92614aa1565b5080156143dc565b600d5490919060ff1615614520576144a56108e860105473ffffffffffffffffffffffffffffffffffffffff1690565b8015801561453f575b6145345773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016331490811561452a575b50614520577fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b61052a915f614aa1565b905033145f6144f3565b5061052a915f614aa1565b508073ffffffffffffffffffffffffffffffffffffffff8416146144ae565b919061456f612866600d5460ff1690565b614627576145956108e860105473ffffffffffffffffffffffffffffffffffffffff1690565b8073ffffffffffffffffffffffffffffffffffffffff8516148015614644575b61463a5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163314908115614630575b50614627577fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b61052a92614aa1565b905033145f6145fa565b5061052a92614aa1565b508073ffffffffffffffffffffffffffffffffffffffff8316146145b5565b61468e907f0000000000000000000000000000000000000000000000000000000000000000906141f1565b67ffffffffffffffff81116146aa5767ffffffffffffffff1690565b7fe2ce9413000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b825115801593906147305790611f5661472d927fffffffffffffffff000000000000000000000000000000000000000000000000604051958694602086015260c01b16604084015233604884015260688301906133be565b91565b50907fffffffffffffffff0000000000000000000000000000000000000000000000009060405192602084015260c01b1660408201526028815261472d6048826115f1565b81519190604183036147a55761479e9250602082015190606060408401519301515f1a90614a05565b9192909190565b50505f9160029190565b600411156147b957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6147ef816147af565b806147f8575050565b614801816147af565b60018103614831577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b61483a816147af565b6002810361486e57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8061487a6003926147af565b146148825750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9060808282031261038e576148e79060408051936148ca856115b4565b8051855260208101516148dc816135b6565b602086015201613c0a565b604082015290565b61494c6080949261498196946149036136b0565b5060206149108651614c3d565b9501918251806149f6575b5061492585613741565b92511515926149356112246122e4565b602086015260408501526060840152151585830152565b6040518095819482937f2637a45000000000000000000000000000000000000000000000000000000000845260048401613c46565b039173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610700575f916149cd575090565b6103e6915060803d6080116149ef575b6149e781836115f1565b8101906148ad565b503d6149dd565b6149ff90614c73565b5f61491b565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411614a89579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610700575f5173ffffffffffffffffffffffffffffffffffffffff811615614a7f57905f905f90565b505f906001905f90565b5050505f9160039190565b9190820180921161423b57565b909173ffffffffffffffffffffffffffffffffffffffff82169182614b6d5750614b3581614afa614af57fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef94600754614a94565b600755565b73ffffffffffffffffffffffffffffffffffffffff85169485614b3a5750614b258160075403600755565b6040519081529081906020820190565b0390a3565b614b629073ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b818154019055614b25565b614b958173ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b54828110614bf45791614b3591614bee827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef95039173ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b55614afa565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff90911660045260245260445260645ffd5b803403614c475790565b7f9f704120000000000000000000000000000000000000000000000000000000005f523460045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040517fe4fe1d94000000000000000000000000000000000000000000000000000000008152602081600481855afa80156107005773ffffffffffffffffffffffffffffffffffffffff915f91614dce575b5016918215614da6576020915f9160405190848201927f23b872dd0000000000000000000000000000000000000000000000000000000084523360248401526044830152606482015260648152614d546084826115f1565b519082855af115613239575f513d614d9d5750803b155b614d725750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60011415614d6b565b7f5373352a000000000000000000000000000000000000000000000000000000005f5260045ffd5b614de7915060203d60201161072b5761071d81836115f1565b5f614cfc56fea2646970667358221220fabba23662f61a7246f70f71a788809f6ef85db2ac110694f07a5d8f0d19f21e64736f6c634300081e00334737457377f528cc8afd815f73ecb8b05df80d047dbffc41c17750a4033592bcddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef57c940aa14b51ea5f96b7a2bea757ce355d996e2c5d7a3c68aff1c75a326269b", "deployedBytecode": "0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461037f578063095ea7b31461037a5780630d35b41514610375578063111ecdad1461037057806313137d651461036b578063134d4f2514610366578063156a0d0f1461036157806316c38b3c1461035c57806317442b701461035757806318160ddd146103525780631f5e13341461034d57806323b872dd146103485780632b507df8146103435780632d1df6fa1461033e578063313ce567146103395780633400288b146103345780633644e5151461032f5780633b6f743b1461032a57806342966c681461032557806352ae28791461027b5780635535d461146103205780635a0dfe4d1461031b5780635c975abb146103165780635e280f11146103115780636fc1b31e1461030c57806370a0823114610307578063715018a61461030257806379cc6790146102fd5780637d25a05e146102f85780637ecebe00146102f357806382413eac146102ee57806384b0196e146102e9578063857749b0146102e45780638da5cb5b146102df57806395d89b41146102da578063963efcaa146102d55780639f68b964146102d05780639fd5a6cf146102cb578063a9059cbb146102c6578063b731ea0a146102c1578063b84c8246146102bc578063b98bd070146102b7578063bb0b6a53146102b2578063bc70b354146102ad578063bd815db0146102a8578063c47f0027146102a3578063c7c7f5b31461029e578063ca5eb5e114610299578063d045a0dc14610294578063d42438851461028f578063d505accf1461028a578063dd62ed3e14610285578063f2fde38b14610280578063fc0c546a1461027b5763ff7bd03d14610276575f80fd5b6131a9565b611381565b6130b9565b613020565b612e65565b612db6565b612d6c565b612c82565b612b11565b612924565b612785565b612712565b6126bb565b6125d6565b6123bd565b612284565b61223c565b611e3f565b611e07565b611daf565b611c9d565b611c4d565b611c14565b611af9565b611a6f565b611a08565b6119c4565b611972565b6118d8565b611871565b6117c2565b611754565b611714565b6116b0565b611632565b611344565b611133565b6110f3565b611050565b611009565b610eec565b610e9b565b610e3d565b610e04565b610dc9565b610d8a565b610bca565b610b62565b610b29565b61086d565b610732565b610586565b610467565b6103e9565b5f91031261038e57565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9060206103e6928181520190610392565b90565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576104456040516104318161042a8161142a565b03826115f1565b604051918291602083526020830190610392565b0390f35b73ffffffffffffffffffffffffffffffffffffffff81160361038e57565b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576104af6004356104a581610449565b6024359033614127565b602060405160018152f35b908160e091031261038e5790565b939291906104e48560a081019260208091805184520151910152565b60a06040860152815180915260c0850190602060c08260051b8801019301915f905b82821061052c575050505090606061052a9294019060208091805184520151910152565b565b90919293602080610578837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408c600196030186526040838a518051845201519181858201520190610392565b960192019201909291610506565b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760043567ffffffffffffffff811161038e576105d59036906004016104ba565b6105dd61320c565b506105e661320c565b506040517ffc0c546a000000000000000000000000000000000000000000000000000000008152602081600481305afa9081156107005773ffffffffffffffffffffffffffffffffffffffff916020915f91610705575b506004604051809481937f18160ddd000000000000000000000000000000000000000000000000000000008352165afa908115610700575f916106d1575b506106846122d5565b905f825260208201526104456106b561069b61326b565b9360408101356106af6060830135926132b1565b506136d6565b6106bd6122d5565b9182526020820152604051938493846104c8565b6106f3915060203d6020116106f9575b6106eb81836115f1565b810190613244565b5f61067b565b503d6106e1565b613239565b6107259150823d841161072b575b61071d81836115f1565b810190613224565b5f61063d565b503d610713565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc606091011261038e57600490565b9181601f8401121561038e5782359167ffffffffffffffff831161038e576020838186019501011161038e57565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820160e0811261038e5760601361038e576004916064359160843567ffffffffffffffff811161038e5782610839916004016107b2565b9290929160a43561084981610449565b9160c4359067ffffffffffffffff821161038e57610869916004016107b2565b9091565b610876366107e0565b50505090923373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001603610afd5780356108c381611042565b6108cc81613741565b906020830135809203610abf5750506109016108e88386614240565b73ffffffffffffffffffffffffffffffffffffffff1690565b91610927610917610912838861424c565b61425e565b610920846132b1565b5084614293565b9485906028831161099f575b50847fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c73ffffffffffffffffffffffffffffffffffffffff8661099a610978886132b1565b956040519384931696836020909392919363ffffffff60408201951681520152565b0390a3005b906109ca92916109c46109b46040870161378a565b936109be876132b1565b926142df565b92614319565b9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b1561038e57610a485f949185926040519687809481937f7cb590120000000000000000000000000000000000000000000000000000000083528b8960048501613794565b03925af19283156107005761097873ffffffffffffffffffffffffffffffffffffffff9361099a927fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c96610aa5575b509350829450869150610933565b80610ab35f610ab9936115f1565b80610384565b5f610a97565b80610ace63ffffffff92611042565b7fc26bebcc000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b7f91ac5e4f000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602060405160028152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57604080517f02e49c2c00000000000000000000000000000000000000000000000000000000815260016020820152f35b8015150361038e57565b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57600435610c0581610bc0565b3373ffffffffffffffffffffffffffffffffffffffff5f5416141580610d68575b610d3c5715610cb757600d5460ff8116610c8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006001911617600d557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b600d5460ff811615610d14577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600d557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fe001a34b000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b503373ffffffffffffffffffffffffffffffffffffffff601054161415610c26565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57604080516001815260026020820152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576020600754604051908152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602060405160018152f35b3461038e5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576104af600435610e7b81610449565b602435610e8781610449565b60443591610e968333836137cc565b613950565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602073ffffffffffffffffffffffffffffffffffffffff60105416604051908152f35b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57600435610f2781610449565b3373ffffffffffffffffffffffffffffffffffffffff5f5416141580610fe7575b610d3c5773ffffffffffffffffffffffffffffffffffffffff168015610fbf576020817f94925e0aa69c2ddac3a4e416156701b82fdfbcd2a0421400777c0273518327cf927fffffffffffffffffffffffff00000000000000000000000000000000000000006010541617601055604051908152a1005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b503373ffffffffffffffffffffffffffffffffffffffff601054161415610f48565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602060405160128152f35b63ffffffff81160361038e57565b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e577f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b6004356110ac81611042565b602435906110b86139eb565b63ffffffff81165f5260016020528160405f20556110ee604051928392836020909392919363ffffffff60408201951681520152565b0390a1005b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602061112b613a37565b604051908152f35b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760043567ffffffffffffffff811161038e576111829036906004016104ba565b60243561118e81610bc0565b61119661320c565b508135916060810135906111e160408201356111b186611042565b6111dc7f000000000000000000000000000000000000000000000000000000000000000080926141f1565b614228565b918083106113155761127b604086611247876111fd8888613aee565b9061120785611042565b61120f61320c565b5061121985613741565b6112306112246122e4565b63ffffffff9097168752565b602086015285850152606084015215156080830152565b8151809381927fddc28c58000000000000000000000000000000000000000000000000000000008352309060048401613c46565b038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561070057610445915f916112e6575b5060405191829182815181526020918201519181019190915260400190565b611308915060403d60401161130e575b61130081836115f1565b810190613c32565b826112c7565b503d6112f6565b827f71c4efed000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5761137f60043533613cde565b005b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576020604051308152f35b6024359061ffff8216820361038e57565b359061ffff8216820361038e57565b90600182811c92168015611420575b60208310146113f357565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916113e8565b600f545f9291611439826113d9565b80825291600181169081156114ad5750600114611454575050565b600f5f9081529293509091907f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8025b838310611493575060209250010190565b600181602092949394548385870101520191019190611482565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b5f92918154916114f6836113d9565b808352926001811690811561154b575060011461151257505050565b5f9081526020812093945091925b838310611531575060209250010190565b600181602092949394548385870101520191019190611520565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6060810190811067ffffffffffffffff8211176115d057604052565b611587565b6040810190811067ffffffffffffffff8211176115d057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176115d057604052565b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5761044561042a6104316116a460043561167981611042565b63ffffffff6116866113b9565b91165f52600360205260405f209061ffff165f5260205260405f2090565b604051928380926114e7565b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602061170a6004356116f081611042565b6024359063ffffffff165f52600160205260405f20541490565b6040519015158152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602060ff600d54166040519015158152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e577ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197602073ffffffffffffffffffffffffffffffffffffffff60043561183581610449565b61183d6139eb565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455604051908152a1005b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5773ffffffffffffffffffffffffffffffffffffffff6004356118c181610449565b165f526005602052602060405f2054604051908152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5761190e6139eb565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5761137f6004356119b081610449565b602435906119bf8233836137cc565b613cde565b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576119fe600435611042565b60206040515f8152f35b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5773ffffffffffffffffffffffffffffffffffffffff600435611a5881610449565b165f52600c602052602060405f2054604051908152f35b3461038e5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57611aa736610783565b5060643567ffffffffffffffff811161038e57611ac89036906004016107b2565b50506020608435611ad881610449565b6040519073ffffffffffffffffffffffffffffffffffffffff309116148152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57611bbb604051611b3a8161042a8161142a565b6040516020611b4981836115f1565b5f8252808201917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820136843781611bc9611b826132bb565b6040519788977f0f00000000000000000000000000000000000000000000000000000000000000895260e0858a015260e0890190610392565b908782036040890152610392565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b828110611bfd57505050500390f35b835185528695509381019392810192600101611bee565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602060405160068152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576040515f600e54611cdb816113d9565b8084529060018116908115611d6d5750600114611d0f575b61044583611d03818503826115f1565b604051918291826103d5565b600e5f9081527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd939250905b808210611d5357509091508101602001611d03611cf3565b919260018160209254838588010152019101909291611d3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b84019091019150611d039050611cf3565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760206040515f8152f35b3461038e5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57600435611e7a81610449565b602435611e8681610449565b604435906064359260843567ffffffffffffffff811161038e57611eae9036906004016107b2565b9085421161220f57611ede8373ffffffffffffffffffffffffffffffffffffffff165f52600c60205260405f2090565b5495604051611f8281611f5660208201948b8b8b8b89919273ffffffffffffffffffffffffffffffffffffffff60a09497969592978160c08601997f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98752166020860152166040840152606083015260808201520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826115f1565b519020611f56611fd6611f93613a37565b9260405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b519020833b15612179579060209161201b60405194859384937f1626ba7e0000000000000000000000000000000000000000000000000000000085526004850161336c565b038173ffffffffffffffffffffffffffffffffffffffff86165afa908115610700577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000915f9161214a575b501603612104575b6120c18173ffffffffffffffffffffffffffffffffffffffff165f52600c60205260405f2080549060018201905590565b938085036120d4575061137f9350614127565b7ff2c3b165000000000000000000000000000000000000000000000000000000005f52600485905260245260445ffd5b7f4b800e46000000000000000000000000000000000000000000000000000000005f90815260045273ffffffffffffffffffffffffffffffffffffffff1660245260445ffd5b61216c915060203d602011612172575b61216481836115f1565b8101906132f6565b5f612088565b503d61215a565b906121899061218f93369161232d565b90613d04565b73ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff8216036121c85750612090565b7f4b800e46000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff9081166004521660245260445ffd5b7f62791302000000000000000000000000000000000000000000000000000000005f52600486905260245ffd5b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e576104af60043561227a81610449565b6024359033613950565b3461038e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b6040519061052a6040836115f1565b6040519061052a60a0836115f1565b67ffffffffffffffff81116115d057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612339826122f3565b9161234760405193846115f1565b82948184528183011161038e578281602093845f960137010152565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261038e576004359067ffffffffffffffff821161038e578060238301121561038e578160246103e69360040135910161232d565b3461038e576123cb36612363565b6123d36139eb565b805167ffffffffffffffff81116115d0576123f8816123f3600e546113d9565b613d30565b6020601f82116001146124825791612468826110ee937f57c940aa14b51ea5f96b7a2bea757ce355d996e2c5d7a3c68aff1c75a326269b955f91612477575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b600e55604051918291826103d5565b90508301515f612437565b600e5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b81811061254c5750927f57c940aa14b51ea5f96b7a2bea757ce355d996e2c5d7a3c68aff1c75a326269b9492600192826110ee9610612515575b5050811b01600e55611d03565b8401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f80612508565b919260206001819286890151815501940192016124ce565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261038e5760043567ffffffffffffffff811161038e5760040182601f8201121561038e5780359267ffffffffffffffff841161038e576020808301928560051b01011161038e579190565b3461038e576125e436612564565b906125ed6139eb565b6125f682613253565b9061260460405192836115f1565b828252602082019260051b81019036821161038e5780935b82851061262c5761137f84613fc0565b843567ffffffffffffffff811161038e5782019060608236031261038e5760405191612657836115b4565b803561266281611042565b8352612670602082016113ca565b602084015260408101359067ffffffffffffffff821161038e57019036601f8301121561038e576020926126ab84933690858135910161232d565b604082015281520194019361261c565b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5763ffffffff6004356126fb81611042565b165f526001602052602060405f2054604051908152f35b3461038e5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760043561274d81611042565b6127556113b9565b6044359067ffffffffffffffff821161038e576104459261277d6104319336906004016107b2565b92909161342e565b61278e36612564565b5f5b81811061282f576040517f8e9e70990000000000000000000000000000000000000000000000000000000081525f81600481335afa801561070057612809915f9161280d575b506040519182917f8351eea7000000000000000000000000000000000000000000000000000000008352600483016103d5565b0390fd5b61282991503d805f833e61282181836115f1565b81019061364d565b826127d6565b61283a818385613516565b9061286a61286661284a846132b1565b60208501359063ffffffff165f52600160205260405f20541490565b1590565b61291b5760c08201359160a081013561288761010083018361355b565b94909161289660e085016135ac565b936128a561012082018261355b565b959095303b1561038e575f966128eb926040519a8b98899788977fd045a0dc000000000000000000000000000000000000000000000000000000008952600489016135c8565b0391305af191821561070057600192612907575b505b01612790565b80610ab35f612915936115f1565b5f6128ff565b60019150612901565b3461038e5761293236612363565b61293a6139eb565b805167ffffffffffffffff81116115d05761295f8161295a600f546113d9565b613d73565b6020601f82116001146129dd57916129ce826110ee937f4737457377f528cc8afd815f73ecb8b05df80d047dbffc41c17750a4033592bc955f9161247757507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b600f55604051918291826103d5565b600f5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802915f5b818110612aa75750927f4737457377f528cc8afd815f73ecb8b05df80d047dbffc41c17750a4033592bc9492600192826110ee9610612a70575b5050811b01600f55611d03565b8401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f80612a63565b91926020600181928689015181550194019201612a29565b91608061052a929493612b00604060c08301978051845267ffffffffffffffff60208201511660208501520151604083019060208091805184520151910152565b019060208091805184520151910152565b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760043567ffffffffffffffff811161038e57612b5b9036906004016104ba565b60407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261038e57606435612b9181610449565b612b996136b0565b50612ba261320c565b50612bab6136b0565b50612bb461320c565b50606082013590612bcd60408401356111b18535611042565b918083106113155750612c0790612be48333613cde565b612bee8385613aee565b612bf7866132b1565b91612c01366140d2565b926148ef565b90612c106122d5565b928184528160208501527f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a612c70612c498551936132b1565b936040519181839233978460409194939263ffffffff606083019616825260208201520152565b0390a361044560405192839283612abf565b3461038e575f60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57600435612cbe81610449565b612cc66139eb565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b1561038e5773ffffffffffffffffffffffffffffffffffffffff60245f928360405195869485937fca5eb5e10000000000000000000000000000000000000000000000000000000085521660048401525af1801561070057612d60575080f35b61137f91505f906115f1565b612d75366107e0565b5050509092303303612d8e576109016108e88386614240565b7f14d4a4e8000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e577fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c2427760602073ffffffffffffffffffffffffffffffffffffffff600435612e2981610449565b612e316139eb565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000006002541617600255604051908152a1005b3461038e5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e57600435612ea081610449565b602435612eac81610449565b604435906064359260843560ff8116810361038e5760a43560c43591864211612ff35790612f8e9291612efd8573ffffffffffffffffffffffffffffffffffffffff165f52600c60205260405f2090565b5497604051612f7581611f5660208201948d8d8d8d89919273ffffffffffffffffffffffffffffffffffffffff60a09497969592978160c08601997f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98752166020860152166040840152606083015260808201520152565b519020611f56612f86611f93613a37565b519020614118565b73ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff8216036121c857506120c18173ffffffffffffffffffffffffffffffffffffffff165f52600c60205260405f2080549060018201905590565b7f62791302000000000000000000000000000000000000000000000000000000005f52600487905260245ffd5b3461038e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760206130b060043561306081610449565b73ffffffffffffffffffffffffffffffffffffffff6024359161308283610449565b165f526006835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b3461038e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5773ffffffffffffffffffffffffffffffffffffffff60043561310981610449565b6131116139eb565b16801561317d5773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b3461038e5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261038e5760206131e336610783565b63ffffffff81356131f381611042565b165f52600182528160405f205491013560405191148152f35b60405190613219826115d5565b5f6020838281520152565b9081602091031261038e57516103e681610449565b6040513d5f823e3d90fd5b9081602091031261038e575190565b67ffffffffffffffff81116115d05760051b60200190565b6040519061327a6020836115f1565b5f80835282815b82811061328d57505050565b60209060405161329c816115d5565b5f815260608382015282828501015201613281565b356103e681611042565b604051906132ca6040836115f1565b600182527f31000000000000000000000000000000000000000000000000000000000000006020830152565b9081602091031261038e57517fffffffff000000000000000000000000000000000000000000000000000000008116810361038e5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b6040906103e694928152816020820152019161332e565b909291928360021161038e57831161038e57600201917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0190565b805191908290602001825e015f815290565b6133ea939261052a928160405196879460208601906133be565b918237015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836115f1565b9160206103e693818152019161332e565b6116a461042a9263ffffffff61345f9397959697165f52600360205260405f209061ffff165f5260205260405f2090565b8051156134db5783156134d55760028410156134ac5750506128096040519283927f9a6d49cd0000000000000000000000000000000000000000000000000000000084526004840161341d565b9092806134cf916103e6946134ca6134c536848461232d565b614082565b613383565b916133d0565b92509050565b5091906103e691369161232d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91908110156135565760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec18136030182121561038e570190565b6134e9565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561038e570180359067ffffffffffffffff821161038e5760200191813603831361038e57565b356103e681610449565b67ffffffffffffffff81160361038e57565b926103e69795969473ffffffffffffffffffffffffffffffffffffffff9367ffffffffffffffff60406136399563ffffffff813561360581611042565b168952602081013560208a0152013561361d816135b6565b166040870152606086015260e0608086015260e085019161332e565b941660a082015260c081850391015261332e565b60208183031261038e5780519067ffffffffffffffff821161038e570181601f8201121561038e57805190613681826122f3565b9261368f60405194856115f1565b8284526020838301011161038e57815f9260208093018386015e8301015290565b604051906136bd826115b4565b815f81525f602082015260406136d161320c565b910152565b613705906111dc7f000000000000000000000000000000000000000000000000000000000000000080926141f1565b9182918084106137125750565b837f71c4efed000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b63ffffffff16805f52600160205260405f205490811561375f575090565b7ff6ff4fb7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b356103e6816135b6565b6103e6939273ffffffffffffffffffffffffffffffffffffffff60809316825260208201525f60408201528160608201520190610392565b73ffffffffffffffffffffffffffffffffffffffff909291921690815f52600660205261381a8360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110613849575b50505050565b8181106139085782156138dc5773ffffffffffffffffffffffffffffffffffffffff8416156138b0576138a6925f526006602052039160405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b555f808080613843565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff847ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b919073ffffffffffffffffffffffffffffffffffffffff8316156139bf5773ffffffffffffffffffffffffffffffffffffffff8116156139935761052a9261455e565b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f54163303613a0b57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b604051613a478161042a8161142a565b60208151910120613a566132bb565b602081519101206040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152613aae60c0826115f1565b51902090565b9081602091031261038e57516103e681610bc0565b9091613ae06103e693604084526040840190610392565b916020818403910152610392565b9091613b22613b4893613b05602085013591614663565b613b1c613b1560a087018761355b565b369161232d565b916146d5565b93909283945f14613c02576002905b61277d613b3d826132b1565b91608081019061355b565b9173ffffffffffffffffffffffffffffffffffffffff613b7d60045473ffffffffffffffffffffffffffffffffffffffff1690565b16908382613b8a57505050565b613bc6926020926040518095819482937f043a78eb00000000000000000000000000000000000000000000000000000000845260048401613ac9565b03915afa801561070057613bd75750565b613bf89060203d602011613bfb575b613bf081836115f1565b810190613ab4565b50565b503d613be6565b600190613b31565b919082604091031261038e57604051613c22816115d5565b6020808294805184520151910152565b9060408282031261038e576103e691613c0a565b9073ffffffffffffffffffffffffffffffffffffffff6020919493946040845263ffffffff81511660408501528281015160608501526080613ccd613c99604084015160a08489015260e0880190610392565b60608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08883030160a0890152610392565b910151151560c08501529416910152565b9073ffffffffffffffffffffffffffffffffffffffff8216156139bf5761052a9161438c565b6103e691613d1191614775565b909291926147e6565b818110613d25575050565b5f8155600101613d1a565b90601f8211613d3d575050565b61052a91600e5f5260205f20906020601f840160051c83019310613d69575b601f0160051c0190613d1a565b9091508190613d5c565b90601f8211613d80575050565b61052a91600f5f5260205f20906020601f840160051c83019310613d6957601f0160051c0190613d1a565b9190601f8111613dba57505050565b61052a925f5260205f20906020601f840160051c83019310613d6957601f0160051c0190613d1a565b80518210156135565760209160051b010190565b919091825167ffffffffffffffff81116115d057613e1f81613e1984546113d9565b84613dab565b6020601f8211600114613e7c578190613e6d9394955f92613e71575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b9055565b015190505f80613e3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821690613ead845f5260205f2090565b915f5b818110613f0657509583600195969710613ecf575b505050811b019055565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080613ec5565b9192602060018192868b015181550194019201613eb0565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310613f5057505050505090565b9091929394602080613fb1837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752606060408b5163ffffffff815116845261ffff8682015116868501520151918160408201520190610392565b97019301930191939290613f41565b5f5b815181101561404b5780613fe56040613fdd60019486613de3565b510151614082565b6140456040613ff48386613de3565b51015163ffffffff6140068487613de3565b5151165f52600360205261404060405f206140306020614026878a613de3565b51015161ffff1690565b61ffff165f5260205260405f2090565b613df7565b01613fc2565b5061407d7fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b6749160405191829182613f1e565b0390a1565b600361ffff600283015116036140955750565b612809906040519182917f9a6d49cd0000000000000000000000000000000000000000000000000000000083526020600484018181520190610392565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261038e5760405190614109826115d5565b60243582526044356020830152565b916103e69391613d1193614a05565b73ffffffffffffffffffffffffffffffffffffffff169081156138dc5773ffffffffffffffffffffffffffffffffffffffff81169283156138b057806141b77f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593855f52600660205260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b55604051908152602090a3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81156141fb570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8181029291811591840414171561423b57565b6141c4565b9060201161038e573590565b9060281161038e576020013560c01c90565b6103e69067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000009116614228565b73ffffffffffffffffffffffffffffffffffffffff8116156142d6575b73ffffffffffffffffffffffffffffffffffffffff81161561399357816103e691614475565b5061dead6142b0565b908060281161038e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd860286103e693019101369161232d565b907fffffffffffffffff000000000000000000000000000000000000000000000000936103e6937fffffffff00000000000000000000000000000000000000000000000000000000611f569360405197889660c01b16602087015260e01b166028850152602c840152604c8301906133be565b600d5490919060ff161561444e576143bc6108e860105473ffffffffffffffffffffffffffffffffffffffff1690565b8073ffffffffffffffffffffffffffffffffffffffff841614801561446d575b6144625773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163314908115614458575b5061444e577fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f61052a92614aa1565b905033145f614421565b505f61052a92614aa1565b5080156143dc565b600d5490919060ff1615614520576144a56108e860105473ffffffffffffffffffffffffffffffffffffffff1690565b8015801561453f575b6145345773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016331490811561452a575b50614520577fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b61052a915f614aa1565b905033145f6144f3565b5061052a915f614aa1565b508073ffffffffffffffffffffffffffffffffffffffff8416146144ae565b919061456f612866600d5460ff1690565b614627576145956108e860105473ffffffffffffffffffffffffffffffffffffffff1690565b8073ffffffffffffffffffffffffffffffffffffffff8516148015614644575b61463a5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163314908115614630575b50614627577fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b61052a92614aa1565b905033145f6145fa565b5061052a92614aa1565b508073ffffffffffffffffffffffffffffffffffffffff8316146145b5565b61468e907f0000000000000000000000000000000000000000000000000000000000000000906141f1565b67ffffffffffffffff81116146aa5767ffffffffffffffff1690565b7fe2ce9413000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b825115801593906147305790611f5661472d927fffffffffffffffff000000000000000000000000000000000000000000000000604051958694602086015260c01b16604084015233604884015260688301906133be565b91565b50907fffffffffffffffff0000000000000000000000000000000000000000000000009060405192602084015260c01b1660408201526028815261472d6048826115f1565b81519190604183036147a55761479e9250602082015190606060408401519301515f1a90614a05565b9192909190565b50505f9160029190565b600411156147b957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6147ef816147af565b806147f8575050565b614801816147af565b60018103614831577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b61483a816147af565b6002810361486e57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8061487a6003926147af565b146148825750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9060808282031261038e576148e79060408051936148ca856115b4565b8051855260208101516148dc816135b6565b602086015201613c0a565b604082015290565b61494c6080949261498196946149036136b0565b5060206149108651614c3d565b9501918251806149f6575b5061492585613741565b92511515926149356112246122e4565b602086015260408501526060840152151585830152565b6040518095819482937f2637a45000000000000000000000000000000000000000000000000000000000845260048401613c46565b039173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610700575f916149cd575090565b6103e6915060803d6080116149ef575b6149e781836115f1565b8101906148ad565b503d6149dd565b6149ff90614c73565b5f61491b565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411614a89579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610700575f5173ffffffffffffffffffffffffffffffffffffffff811615614a7f57905f905f90565b505f906001905f90565b5050505f9160039190565b9190820180921161423b57565b909173ffffffffffffffffffffffffffffffffffffffff82169182614b6d5750614b3581614afa614af57fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef94600754614a94565b600755565b73ffffffffffffffffffffffffffffffffffffffff85169485614b3a5750614b258160075403600755565b6040519081529081906020820190565b0390a3565b614b629073ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b818154019055614b25565b614b958173ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b54828110614bf45791614b3591614bee827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef95039173ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b55614afa565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff90911660045260245260445260645ffd5b803403614c475790565b7f9f704120000000000000000000000000000000000000000000000000000000005f523460045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040517fe4fe1d94000000000000000000000000000000000000000000000000000000008152602081600481855afa80156107005773ffffffffffffffffffffffffffffffffffffffff915f91614dce575b5016918215614da6576020915f9160405190848201927f23b872dd0000000000000000000000000000000000000000000000000000000084523360248401526044830152606482015260648152614d546084826115f1565b519082855af115613239575f513d614d9d5750803b155b614d725750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60011415614d6b565b7f5373352a000000000000000000000000000000000000000000000000000000005f5260045ffd5b614de7915060203d60201161072b5761071d81836115f1565b5f614cfc56fea2646970667358221220fabba23662f61a7246f70f71a788809f6ef85db2ac110694f07a5d8f0d19f21e64736f6c634300081e0033" } \ No newline at end of file